Saltar al contenido principal

iOS SDK

Añade AR Clip VPS a una app nativa de iOS. El SDK usa el seguimiento de ARKit para encontrar la posición del usuario en tus mapas VPS. Es un XCFramework que funciona en apps con UIKit, RealityKit y SwiftUI.

Antes de empezar​

  • iOS 15.0 o posterior
  • Xcode 14 o posterior (Swift 5.7 o posterior)
  • Un dispositivo compatible con ARKit. El simulador no está soportado.

Instalación​

Elige una de estas dos formas.

Swift Package Manager​

  1. En Xcode, elige File → Add Packages….
  2. Escribe https://github.com/WebAR-Studio/was-vps-ios.git.
  3. Elige la rama o la etiqueta que necesites y añade el paquete a tu target.

Manual​

  1. Clona el repositorio:
    git clone https://github.com/WebAR-Studio/was-vps-ios.git
  2. Arrastra WASVPS.xcframework a tu proyecto.
  3. En General → Frameworks, Libraries, and Embedded Content, comprueba que el framework está incrustado (embedded).

Añadir permisos​

Añade a Info.plist las descripciones de uso de la cámara y de la ubicación, para que iOS pueda pedirle acceso al usuario.

<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera to display augmented reality content.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to your location to place AR content accurately.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>VPSLocalization</key>
<string>Enable precise location for accurate AR content positioning.</string>
</dict>

Iniciar VPS​

Llama a VPSBuilder.initializeVPS para crear un VPSService. Pásale la ARSession, tu clave de API y tus ID de ubicación.

¿Necesitas una clave de API?

Consíguela en arclip.design o escribe a support@arclip.design.

import ARKit
import WASVPS

final class VPSDemoController: UIViewController, ARSCNViewDelegate {
@IBOutlet private weak var sceneView: ARSCNView!
private var configuration: ARWorldTrackingConfiguration?
private var vps: VPSService?

override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene()

configuration = VPSBuilder.getDefaultConfiguration()

VPSBuilder.initializeVPS(
arSession: sceneView.session,
apiKey: "your-api-key",
locationIds: ["your-location-id"],
url: "https://api.arclip.app/vps/api/v3",
gpsUsage: false,
delegate: self
) { service in
self.vps = service
self.vps?.start()
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let configuration { sceneView.session.run(configuration) }
}

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
vps?.frameUpdated()
}
}

extension VPSDemoController: VPSServiceDelegate {
func positionVPS(pos: ResponseVPSPhoto) {
print("Localized pose:", pos)
}

func error(err: NSError) {
print("VPS error:", err)
}

func sending(requestData: UploadVPSPhoto?) {
print("Sending localization request…")
}
}

Pausa el servicio en sessionWasInterrupted y vuelve a iniciarlo en sessionInterruptionEnded.

RealityKit​

Con RealityKit, pasa los fotogramas en ARSessionDelegate:

func session(_ session: ARSession, didUpdate frame: ARFrame) {
vps?.frameUpdated()
}

Las llamadas del ciclo de vida (start, stop, clearCustomLocPos) son las mismas que con SceneKit.

SwiftUI​

Envuelve ARSCNView o ARView en UIViewRepresentable o UIViewControllerRepresentable. Guarda VPSService en un view model compartido y llama a start() / stop() desde los controles de SwiftUI.

Más opciones​

  • Pasa una transformación conocida antes de la primera localización con setCustomLocPosForFirstRequest.
  • Usa otro endpoint pasando otra url a initializeVPS.
  • Activa gpsUsage para incluir las coordenadas del dispositivo en las peticiones.

Solución de problemas​

  • Si VPSBuilder.getDefaultConfiguration() devuelve nil, el dispositivo no es compatible.
  • Si los callbacks no se llaman nunca, comprueba que frameUpdated() se ejecuta en cada fotograma y que tu clave de API y tus ID de ubicación son válidos.
  • En la carpeta /examples tienes ejemplos para UIKit, RealityKit y SwiftUI.